package cn.dengta.webapp.im.dto;

import java.util.HashMap;
import java.util.Map;

import cn.dengta.common.context.I18N;
import cn.dengta.context.model.WesKit;
import cn.dengta.webapp.ai.model.DefaultAI;
import cn.dengta.webapp.user.model.Gender;
import lombok.*;

/**
 * Ai 配置 数据
 */
@Getter
@Setter
public class AiConfigDTO {

	/** AI分包配置 */
	private Map<WesKit, AiWesKitConfig> config;

	private transient int fastReplyNum = 3;

	/** 预设 AI，用于生成人物介绍 */
	private transient DefaultAI story = DefaultAI.story;
	/** 预设 AI，用于生成开场白 */
	private transient DefaultAI greeting = DefaultAI.greeting;
	/** 预设 AI，用于生成快速回复 */
	private transient DefaultAI fastReply = DefaultAI.fastReply;
	/** 试听文本 */
	private transient String auditionText = "ai.audition.text";
	//	private String auditionText = "You finally arrived, do you know how long I’ve been waiting for you?";
	public static AiConfigDTO findDefault() {
		AiConfigDTO dto = new AiConfigDTO();
		dto.setConfig(new HashMap<>(2, 1));

		return dto;
	}

	public AiWesKitConfig buildWesKit(WesKit wesKit) {
		return this.getConfig().get(wesKit);
	}

	public String findAuditionText() {
		return I18N.msg(auditionText);
	}

	@Getter
	@Setter
	@NoArgsConstructor
	public static class AiWesKitConfig {

		/** ai创建人数 */
		private int createLimitNum = 3;
		/** APP首页展示设置：1=官方AI;2=用户创作；3=真人推荐 */
		private String appShowView = "1,3";

		/** ai收费方式：true=男用户付费；false=谁主动谁付费(不区分男女，只要聊天就付费) */
		private boolean malePay = false;
		/** Ai转真人文字聊天限制：true=必须先真人通话；false=不限制 */
		private boolean aiToUser = false;
		/** Ai速配价格（钻石/次） */
		private int speedPrice = 1;
		/** 官方聊天价格 */
		private AiPrice officialPrice = new AiPrice(1, 2, null);
		/** 用户聊天价格 */
		private AiPrice userPrice = new AiPrice(1, 2, null);
		/** 用户AI礼物收益比例(%) */
		private int giftRatio = 30;
		/** 用户AI聊天收益比例(%) */
		private int msgRatio = 28;
		/** 用户AI视频收益比例(%) */
		private int audioRatio = 28;
		/** 真人速配价格 */
//		private AiPrice peoplePrice = new AiPrice(null, 35, 50);

		public AiPrice choosePrice(boolean isOfficial) {
			return isOfficial ? officialPrice : userPrice;
		}

		/** 是否收费 */
		public boolean aiCost(Gender gender) {
			return !this.isMalePay() || gender == Gender.MALE;
		}

	}

	/**
	 * AI聊天价格
	 */
	@Getter
	@Setter
	@AllArgsConstructor
	@NoArgsConstructor
	public static final class AiPrice {

		/** 文字聊天价格 */
		private Integer msg;
		/** 语音聊天价格（钻石/分钟） */
		private Integer audio;
		/** 视频聊天价格（钻石/分钟） */
		private Integer video;

	}

}
